In computer networking and telecommunications, computing devices send messages to one another and often must wait for a response before proceeding. To avoid waiting indefinitely the computing devices may include a timeout mechanism that when triggered alert the computing device to perform some action. For example, if no response is received during the duration of a timeout the computing device may resend a message or close a connection. The duration of the timeout is often based on the amount of time in which a response should be expected.
As computing devices and networking infrastructure have increased in speed they are able to process more messages at higher rates. As a result, the duration necessary for a timeout has decreased. This creates a challenge for implementing a network timeout mechanism that can efficiently, accurately and reliably set and handle timeouts having short durations of time.
Traditional timeout mechanisms are based on network timeouts implemented in software. One example is scheduling timeout requests in data structures that are checked each time a kernel clock interrupt occurs. The problem is that kernel clock interrupts are costly and may not occur often enough to reliably trigger timeouts with short time durations. Other timeout mechanisms utilize busy loops implemented in software. The busy loop can accommodate timeouts with shorter durations of time, however, it may tie up the CPU thread for the duration of the delay and is thus less computationally efficient.